package _11_整理题目._Spring基础原理._设计模式._02_装饰器模式._穿服装;

/**
 * 装饰器模式的两个角色：装饰器 和 被装饰者
 *      装饰器：比如衣服、裤子、鞋子
 *      被装饰者：人、可以是小明等
 *
 * 装饰器模式的两个关系：
 *      装饰器 要和 被装饰者 实现同一个接口，得穿 合身的衣服
 *      需要在 装饰器 中使用 被装饰者，把人装到衣服上，裤子上
 *
 *
 * 装饰器模式关注于在一个对象上动态地添加方法，而代理模式关注于控制对对象的访问。
 * 换句话说，用代理模式，代理类可以对它的客户隐藏一个对象的具体信息。
 * 因此当使用代理模式的时候，我们常常在一个代理类中创建一个对象的实例；
 * 当使用装饰器模式的时候，我们通常的做法是将原始对象作为一个参数传给装饰器的构造器。
 */
public class Test {
    public void show() {
        System.out.println("买衣服，花了 1000 元");
        System.out.println("买裤子，花了 800 元");
        System.out.println("买鞋子，花了 900 元");
    }

    public static void main(String[] args) {
        Person xiaoMing = new XiaoMing();

        xiaoMing = new Shirt(xiaoMing);

        xiaoMing = new Trousers(xiaoMing);

        xiaoMing.show();


        Person xiaoHong = new XiaoHong();

        xiaoHong = new Shirt(xiaoHong);

        xiaoHong = new Trousers(xiaoHong);

        xiaoHong.show();
    }

}
